package br.gov.ms.tce.modelo.bean;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Enumerated;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;


/**
*  @class UnidadeGestora
 * @author Anderson Paulino
 * @date 27/05/2011
 *
 */
@Entity
@Table( schema = "comum", name = "unidade_gestora")
public class UnidadeGestora extends PessoaJuridica implements java.io.Serializable {

	/**
	 * serialVersionUID
	 */
	private static final long serialVersionUID = -6276315679072783485L;
	
	private TipoUGEnum tipoUg;
	private PoderEnum poder;
	private UnidadeAdministrativa unidadeAdministrativa;	
	private Date dataCriacao;
	private Date dataExtincao;
	private int codUgPrincipal;
	private String sigla;
	private String contato;	
	private Date dataCadastro;
	private Integer opcaoLrfRgfSemestral;
	private Date dataValidacaoUg;
	

	public UnidadeGestora() {
	}

	public UnidadeGestora(TipoUGEnum tipoUg, PoderEnum poder,
			UnidadeAdministrativa unidadeAdministrativa, Date dataCriacao,
			Date dataExtincao, int codUgPrincipal, String sigla) {
		this.tipoUg = tipoUg;
		this.poder = poder;
		this.unidadeAdministrativa = unidadeAdministrativa;		
		this.dataCriacao = dataCriacao;
		this.dataExtincao = dataExtincao;
		this.codUgPrincipal = codUgPrincipal;
		this.sigla = sigla;

	}

	public UnidadeGestora(String cnpj, String razaoSocial, String nomeFantasia,String insEstadual, String insMunicipal, TipoUGEnum tipoUg, PoderEnum poder,
			UnidadeAdministrativa unidadeAdministrativa, Date dataCriacao,
			Date dataExtincao, int codUgPrincipal, String sigla,
			String contato, Date dataCadastro,
			Integer opcaoLrfRgfSemestral, Date dataValidacaoUg) {
		super(cnpj,razaoSocial,nomeFantasia,insEstadual, insMunicipal);
		this.tipoUg = tipoUg;
		this.poder = poder;
		this.unidadeAdministrativa = unidadeAdministrativa;
		this.dataCriacao = dataCriacao;
		this.dataExtincao = dataExtincao;
		this.codUgPrincipal = codUgPrincipal;
		this.sigla = sigla;
		this.contato = contato;
		this.dataCadastro = dataCadastro;
		this.opcaoLrfRgfSemestral = opcaoLrfRgfSemestral;
		this.dataValidacaoUg = dataValidacaoUg;
		
	}


	@Enumerated
	public TipoUGEnum getTipoUg() {
		return this.tipoUg;
	}

	public void setTipoUg(TipoUGEnum tipoUg) {
		this.tipoUg = tipoUg;
	}

	@Enumerated
	public PoderEnum getPoder() {
		return this.poder;
	}

	public void setPoder(PoderEnum poder) {
		this.poder = poder;
	}

	@ManyToOne
	@JoinColumn(name = "cod_ua", nullable = false)
	public UnidadeAdministrativa getUnidadeAdministrativa() {
		return this.unidadeAdministrativa;
	}

	public void setUnidadeAdministrativa(
			UnidadeAdministrativa unidadeAdministrativa) {
		this.unidadeAdministrativa = unidadeAdministrativa;
	}

	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "data_criacao", nullable = false, length = 23)
	public Date getDataCriacao() {
		return this.dataCriacao;
	}

	public void setDataCriacao(Date dataCriacao) {
		this.dataCriacao = dataCriacao;
	}

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "data_extincao", nullable = false, length = 23)
	public Date getDataExtincao() {
		return this.dataExtincao;
	}

	public void setDataExtincao(Date dataExtincao) {
		this.dataExtincao = dataExtincao;
	}

	@Column(name = "cod_ug_principal", nullable = false)
	public int getCodUgPrincipal() {
		return this.codUgPrincipal;
	}

	public void setCodUgPrincipal(int codUgPrincipal) {
		this.codUgPrincipal = codUgPrincipal;
	}

	@Column(name = "sigla", nullable = false, length = 12)
	public String getSigla() {
		return this.sigla;
	}

	public void setSigla(String sigla) {
		this.sigla = sigla;
	}

	@Column(name = "contato", length = 200)
	public String getContato() {
		return this.contato;
	}

	public void setContato(String contato) {
		this.contato = contato;
	}

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "data_cadastro", length = 23)
	public Date getDataCadastro() {
		return this.dataCadastro;
	}

	public void setDataCadastro(Date dataCadastro) {
		this.dataCadastro = dataCadastro;
	}

	@Column(name = "opcao_lrf_rgf_semestral")
	public Integer getOpcaoLrfRgfSemestral() {
		return this.opcaoLrfRgfSemestral;
	}

	public void setOpcaoLrfRgfSemestral(Integer opcaoLrfRgfSemestral) {
		this.opcaoLrfRgfSemestral = opcaoLrfRgfSemestral;
	}

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "data_validacao_ug", length = 23)
	public Date getDataValidacaoUg() {
		return this.dataValidacaoUg;
	}

	public void setDataValidacaoUg(Date dataValidacaoUg) {
		this.dataValidacaoUg = dataValidacaoUg;
	}
}
